package com.mqb.n4;

import com.mqb.n2.util.Sleeper;
import lombok.extern.slf4j.Slf4j;

/**
 * @author mqb
 * @date 2021/4/22 20:49
 */
@Slf4j(topic = "c.TestWaitNotify")
public class TestWaitNotify {
    static final Object obj = new Object();
    public static void main(String[] args) {
        // t1、t2使用的同一个锁对象，所以wait()时会进入同一个 waitSet
        new Thread(()->{
            synchronized (obj){
                log.debug("执行....");
                try {
                    obj.wait(5000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                log.debug("其他代码....");
            }
        },"t1").start();

//        new Thread(()->{
//            synchronized (obj){
//                log.debug("执行....");
//                try {
//                    obj.wait();
//                } catch (InterruptedException e) {
//                    e.printStackTrace();
//                }
//                log.debug("其他代码....");
//            }
//        },"t2").start();

        // 主线程两秒后执行
        Sleeper.sleep(2);
        log.debug("唤醒 obj 上其他线程");
        synchronized (obj){
            //obj.notify();   // 唤醒obj上的一个线程
            //obj.notifyAll();    // 唤醒obj上的所有线程
        }
    }
}
